package manager.modulo.clientefornecedor.dao;

import java.sql.SQLException;
import manager.auxiliares.MensagemExcessao;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.util.LinkedList;
import manager.principal.fonte.JanelaLogin;
import manager.interfaces.InterfaceDao;
import manager.modulo.funcionario.enumerator.EnumSexo;
import manager.modulo.funcionario.enumerator.EnumSexo.Sexo;

/**
 * Esta classe será utilizada para cadastra a entidade user no banco de dados
 *
 * @author Thiago
 */
public class PessoaFisicaDao implements InterfaceDao {

    int idClienteFornecedor;
    String nome;
    String cpf;
    String identidade;
    Timestamp dtNascimento;
    Sexo sexo;

    /**
     * Inicializando as variáveis
     */
    public PessoaFisicaDao() {
        resetValues();
        idClienteFornecedor = 0;
    }

    public PessoaFisicaDao(int newIdPartner) {
        resetValues();
        idClienteFornecedor = newIdPartner;
    }

    private void resetValues() {
        nome = "";
        cpf = "";
        identidade = "";
        sexo = Sexo.NAOIDENTIFICADO;
        dtNascimento = new Timestamp(00 - 00 - 00);
    }

    public void buscar(int idBuscado) {
        try {
            setIdClienteFornecedor(idBuscado);
            String sql = "SELECT * FROM pessoa_fisica WHERE id_cliente_fornecedor = ?";
            PreparedStatement preparedStatement = JanelaLogin.getConnection().prepareStatement(sql);
            preparedStatement.setInt(1, idBuscado);
            ResultSet resultSet = preparedStatement.executeQuery();
            if (resultSet.first()) {
                nome = resultSet.getString("tx_nome");
                cpf = resultSet.getString("tx_cpf");
                identidade = resultSet.getString("tx_identidade");
                dtNascimento = resultSet.getTimestamp("dt_nascimento");
                sexo = EnumSexo.ConverterNumeroEnum(resultSet.getInt("cd_sexo"));
            }

            resultSet.close();
            preparedStatement.close();
        } catch (Exception e) {
            MensagemExcessao.mostrarMensagem(e, "Buscando Pessoas Físicas");
        }
    }

    public void inserir() throws SQLException {
        String sql = "INSERT INTO pessoa_fisica "
                + " (tx_nome,"
                + " tx_cpf,"
                + " tx_identidade,"
                + " dt_nascimento,"
                + " cd_sexo,"
                + " id_cliente_fornecedor) "
                + "VALUES"
                + " (?,"
                + " ?,"
                + " ?,"
                + " ?,"
                + " ?,"
                + " ?)";
        PreparedStatement preparedStatement = JanelaLogin.getConnection().prepareStatement(sql);

        preparedStatement.setString(1, nome);
        preparedStatement.setString(2, cpf);
        preparedStatement.setString(3, identidade);
        preparedStatement.setTimestamp(4, dtNascimento);
        preparedStatement.setInt(5, EnumSexo.ConverterEnumNumero(sexo));
        preparedStatement.setInt(6, idClienteFornecedor);
        preparedStatement.executeUpdate();

        preparedStatement.close();
    }

    public void atualizar() throws SQLException {
        String sql = "UPDATE "
                + " pessoa_fisica SET "
                + " tx_nome = ?, "
                + " tx_cpf = ?, "
                + " tx_identidade = ?, "
                + " dt_nascimento = ?, "
                + " cd_sexo = ? "
                + "WHERE "
                + " id_cliente_fornecedor = ?";
        PreparedStatement preparedStatement = JanelaLogin.getConnection().prepareStatement(sql);
        preparedStatement.setString(1, nome);
        preparedStatement.setString(2, cpf);
        preparedStatement.setString(3, identidade);
        preparedStatement.setTimestamp(4, dtNascimento);
        preparedStatement.setInt(5, EnumSexo.ConverterEnumNumero(sexo));
        preparedStatement.setInt(6, idClienteFornecedor);
        preparedStatement.executeUpdate();

        preparedStatement.close();
    }

    public void deletar() throws SQLException {
        String sql = "DELETE FROM pessoa_fisica WHERE id_cliente_fornecedor = ?";
        PreparedStatement preparedStatement = JanelaLogin.getConnection().prepareStatement(sql);
        preparedStatement.setInt(1, idClienteFornecedor);
        preparedStatement.executeUpdate();

        preparedStatement.close();
    }

    public LinkedList<String> buscar(String opcao, String buscado, boolean limite) throws SQLException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public int getIdClienteFornecedor() {
        return idClienteFornecedor;
    }

    public void setIdClienteFornecedor(int idClienteFornecedor) {
        this.idClienteFornecedor = idClienteFornecedor;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public String getIdentidade() {
        return identidade;
    }

    public void setIdentidade(String identidade) {
        this.identidade = identidade;
    }

    public Timestamp getDtNascimento() {
        return dtNascimento;
    }

    public void setDtNascimento(Timestamp dtNascimento) {
        this.dtNascimento = dtNascimento;
    }

    public Sexo getSexo() {
        return sexo;
    }

    public void setSexo(Sexo sexo) {
        this.sexo = sexo;
    }
}
